package cn.ucai.day03_DuoTai;
/*
 * 多态的优点
1. 消除类型之间的耦合关系
2. 可替换性
3. 可扩充性
4. 接口性
5. 灵活性
6. 简化性
多态存在的三个必要条件
继承
重写
父类引用指向子类对象
eg. A extends B
	A.f() B.f()
	B b=new A()
这时调用b.f()的输出应该是A.f()
 */
public class TestFatherChild {

	public static void main(String[] args) {
		//下面编译时类型与运行时类型相同，不存在多态  
        Father father = new Father();  
        System.out.println(father.name);  
        father.fatherMethod();  
        father.overrideMethod();  
        System.out.println();  
        //下面编译时类型与运行时类型相同，不存在多态  
        Child child = new Child();  
        System.out.println(child.name);  
        child.childMethod();  
        child.overrideMethod();  
        System.out.println();  
        //下面编译时类型与运行时类型不同，多态发生  
        //父类引用指向子类对象，多态发生条件齐全  
        //father2对象编译时类型是FatherClass，运行时类型是ChildClass  
        Father father2 = new Child();  
        //注意：与方法不同，对象的属性不具备多态性，下面输出的是父类的name  
        System.out.println(father2.name);  
        father2.fatherMethod();  
        //多态发生，此处调用的是子类重写的方法  
        father2.overrideMethod();  

	}

}
